#include<iostream>
using namespace std;
#include<unistd.h>

// int main()
// {
//     while(1)
//     {
//         printf("我是一个进程啦\n");
        
//         sleep(1);
//     }
//     return 0;
// }


// int main()
// {
//     while(1)
//     {
//         cout << "我是一个进程啦 " << "  " << getpid() << endl;
//         cout << "我的父进程的PID是: " << " " << getppid() << endl;
        
//         sleep(1);
//     }
//     return 0;
// }



// int main()
// {
//     cout << "这是打印的第一行内容" << endl;
    
//     fork();
//     cout << "这是打印的第二行内容" << endl;
//     return 0;
// }


// int main()
// {
//     pid_t id = fork();
//     if (id == 0) 
//     {
//         while(1)
//         {
//             cout << "this is child process, having a pid of " << getpid() << " and having a ppid of " << getppid() << endl;
//             sleep(1);

//         }
//     }
//     else if (id > 0)
//     {
//         while (1)
//         {
//             cout << "this is father process, having a pid of " << getpid() << endl;
//             sleep(1);
//         }
//     }
//     else 
//     {
//         cout << "子进程创建失败" << endl;
//     }
//     return 0;
// }

#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>


// int main()
// {
//     int fd = open("log.txt", O_WRONLY);
//     if (fd == -1)
//     {
//         perror("open");  //perror打印错误码
//         return -1;
//     }
//     return 0;
// }

// int main()
// {
//     int fd = open("log.txt", O_WRONLY | O_CREAT);
//     if (fd == -1) 
//     {
//         perror("open"); //打印错误码
//         return -1;
//     }
//     return 0;
// // }


// int main()
// {
//     int fd = open("log.txt", O_WRONLY | O_CREAT, 0666);
//     if (fd == -1) 
//     {
//         perror("open"); //打印错误码
//         return -1;
//     }
//     return 0;
// }

#include<string.h>


// int main()
// {
//     umask(0);
//     int fd = open("log.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);
//     if (fd == -1) 
//     {
//         perror("open");
//         return -1;
//     }
//     //
//     const char* message = "hello linux\n";
//     write(fd, message, strlen(message));  //第一个文件fd， 第二个信息， 第三个写的大小


//     return 0;
// }

// int main()
// {
//     umask(0);
//     int fd = open("log.txt", O_WRONLY | O_CREAT | O_APPEND, 0666);
//     if (fd == -1)
//     {
//         perror("open");
//         return -1;
//     }
//     //
//     const char * message = "hello linux\n";
//     write(fd, message, strlen(message));
    
//     return 0;
// }


#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>

#define filename "log.txt"

// int main()
// {
//     close(0);   //close关闭文件,如果有两个进程， 那么两个进程的0号fd都指向了键盘输入， 这个时候如果关闭一个进程0号fd， 这个fd是进程管理里面的的， 是属于进程的， 不是属于
//     //文件系统的， 也就是说， 一个进程关闭fd， 并不影响另一个进程。另一个进程的fd还是打开着的。 

//     int fd = open(filename, O_CREAT | O_WRONLY | O_TRUNC, 0666);    
//     if (fd == -1) 
//     {
//         perror("open");
//         return -1;
//     }
//     //
//     printf("fd: %d\n", fd);
//     const char* message = "hello linux\n";
//     int cnt = 5;
//     while (cnt--)
//     {
//         write(fd, message, strlen(message));
//     }
//     return 0;
// }

int main()
{
    close(1);   //重定向， 将显示器文件关掉， 然后打开一个文件， 这个文件的fd就默认是1了（fd是进程级别的， 所以不会受到其他进程的影响）
    int fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0666);
    if (fd == -1)
    {
        perror("open");
        return -1;
    }
    /// 重定向成功， 以后再向显示器打印数据， 就是向文件中打印数据了 
    const char* message = "hello linux\n";
    int cnt = 5;
    while (cnt--)
    {
        write(1, message, strlen(message));
    }


    return 0;
}